texthandle: Make a bigger hit area around texthandles
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 16 May 2014 17:59:31 +0000 (19:59 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Fri, 23 May 2014 17:54:32 +0000 (19:54 +0200)
The hit area now extends to all sides around the handle, instead
of just towards where the text is. This makes it easier to grab
handles once shown.

gtk/gtktexthandle.c

index 06347499dcb6fc5c56bef16ef8f49a52c9de1a36..226198732eb4868edfb8517446155cc9671d1bf8 100644 (file)
@@ -102,11 +102,14 @@ _gtk_text_handle_draw (GtkTextHandle         *handle,
 
   priv = handle->priv;
   context = gtk_widget_get_style_context (priv->parent);
+  _gtk_text_handle_get_size (handle, &width, &height);
 
   cairo_save (cr);
 
   if (pos == GTK_TEXT_HANDLE_POSITION_SELECTION_END)
-    cairo_translate (cr, 0, priv->windows[pos].pointing_to.height);
+    cairo_translate (cr, width, priv->windows[pos].pointing_to.height);
+  else
+    cairo_translate (cr, width, height);
 
   gtk_style_context_save (context);
   gtk_style_context_add_class (context,
@@ -125,7 +128,6 @@ _gtk_text_handle_draw (GtkTextHandle         *handle,
     gtk_style_context_add_class (context,
                                  GTK_STYLE_CLASS_TOP);
 
-  _gtk_text_handle_get_size (handle, &width, &height);
   gtk_render_background (context, cr, 0, 0, width, height);
 
   gtk_style_context_restore (context);
@@ -313,6 +315,13 @@ _gtk_text_handle_update (GtkTextHandle         *handle,
       rect.width = width;
       rect.height = 0;
 
+      /* Make the window 3 times as wide, and 2 times as high (plus
+       * handle_window->pointing_to.height), the handle will be rendered
+       * in the center. Making the rest an invisible input area.
+       */
+      width *= 3;
+      height *= 2;
+
       _handle_update_child_visible (handle, pos);
 
       window = gtk_widget_get_parent (handle_window->widget);